package modulo;

import java.util.Observable;

import vista.Campo;



public class Giocatore extends Observable {
	
	public static final int energiaMassima=50;
	private Dardo dardo;
	private int squadra;
	private int x,y;

	/**
	 * @return the squadra
	 */
	public int getSquadra() {
		return squadra;
	}

	/**
	 * @param squadra
	 *            the squadra to set
	 */
	public void setSquadra(int squadra) {
		this.squadra = squadra;
	}

	private int energia;
	private int sfere;

	/**
	 * @return the dardo
	 */
	public Dardo getDardo() {
		return dardo;
	}

	/**
	 * @param dardo
	 *            the dardo to set
	 */
	public void setDardo(Dardo dardo) {
		this.dardo = dardo;
	}

	/*
		Come Linea Guida, in Java le funzioni 'get'
		che ritornano booleani vengono sempre chiamate
		'is' anzich� 'get'
		il Prof
	*/
	/**
	 * @return the vivo
	 */
	public boolean isVivo() {
		if(this.sfere!=0)
			return true;
		return false;
	}

	/**
	 * @param vivo
	 *            the vivo to set
	 */




	/**
	 * @return the energia
	 */
	public int getEnergia() {
		return energia;
	}

	/**
	 * @param energia
	 *            the energia to set
	 */
	public void setEnergia(int energia) {
		this.energia = energia;
		setChanged();
		notifyObservers();
	}

	/**
	 * @return the sfere
	 */
	public int getSfere() {
		return sfere;
	}

	/**
	 * @param sfere
	 *            the sfere to set
	 */
	public void setSfere(int sfere) {
		this.sfere = sfere;

		//setChanged();
		//notifyObservers();
	}

	/**
	 * @param x
	 * @param y
	 * @param energia
	 * @param sfere
	 */
	public Giocatore(  int sfere, int squadra,int x,int y) {
		super();
		this.dardo=Campo.SlowDardo;
		

		this.energia = energiaMassima;
		this.sfere = sfere;
		this.squadra = squadra;
		this.x=x;
		this.y=y;
	}

	public void spara() {
		energia -= dardo.getAffaticamento();
		//setChanged();
		//notifyObservers();

	}
//	public boolean ControlloColpito(int x,int y){
		
	//}
	public void Colpito() {
		if(this.isVivo()==true)
			sfere -= 1;
		//setChanged();
		//notifyObservers();
	}

	/**
	 * @return the x
	 */
	public int getX() {
		return x;
	}

	/**
	 * @param x the x to set
	 */
	public void setX(int x) {
		this.x = x;
		setChanged();
		notifyObservers();
	}

	/**
	 * @return the y
	 */
	public int getY() {
		return y;
	}

	/**
	 * @param y the y to set
	 */
	public void setY(int y) {
		this.y = y;
		setChanged();
		notifyObservers();
	}
	
	public void LanciaDardo(){
		this.setEnergia(this.getEnergia()-this.dardo.getAffaticamento());
		/* Meglio evitare di mettere una dipendenza a Timer
		 * anche qui, dove non � necessario.
		 * il Prof
		 */
		new AscoltatoreLancioDardo(this,this.getDardo());
		//setChanged();
		//notifyObservers();
	}
	
	public boolean ControllaVittoria(ProxyListaGiocatori lista){
		for(int i=0;i<lista.getElencoGiocatori().length;i++){
			if(lista.getElencoGiocatori()[i].squadra!=this.squadra&&lista.getElencoGiocatori()[i].isVivo())
				return false;
		}
		return true;
	}
	
}
